package com.kernel;

import java.lang.reflect.Method;
import java.util.ArrayList;
import java.util.List;

/****************************************
 * @name DemoGenerics
 * @description
 * @author 黄彬恒
 * @since 2018/7/13
 ***************************************/
public class DemoGenerics {

    /*
     * 通过反射越过泛型检查
     * 例如：有一个String泛型的集合，怎样能向这个集合中添加一个Integer类型的值？
     */

    public static void main(String[] args) throws Exception {
        List<String> strList = new ArrayList<>();
        strList.add("aaa");
        strList.add("bbb");

//          strList.add(String.valueOf(100));
        //获取ArrayList的Class对象，反向的调用add()方法，添加数据
        Class<?> listClass = strList.getClass(); //得到 strList 对象的字节码 对象
//        Class<?> listClass = ArrayList.class; //得到 strList 对象的字节码 对象
        //获取add()方法
        Method m = listClass.getMethod("add", Object.class);
        //调用add()方法
        m.invoke(strList, 100);
        m.invoke(strList, "ccc");

        //遍历集合
        for (Object obj : strList) {
            System.out.println(obj);
        }
    }
}
